﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using ListaTelefonicaMEM.Formularios;

namespace ListaTelefonicaMEM.Controles
{
    class TreeViewPadrao : TreeView
    {

        protected override void OnCreateControl()
        {
            base.OnCreateControl();
            this.Font = new Font(Config.NomeFonte, Config.TamanhoFonte + 3);
        }

        private int levelEmpresa = 1;
        protected override void OnKeyUp(KeyEventArgs e)
        {
            base.OnKeyUp(e);
            if (e.KeyData == Keys.F5)
            {
                this.RefreshDados();
            }
            else if (e.KeyData == Keys.Delete)
            {
                int lvl = this.SelectedNode.Level;
                string strNode = this.SelectedNode.Text;
                string strPai = null;

                if (lvl > 0)
                {
                    strPai = this.SelectedNode.Parent.Text;
                }

                string msg = null;

                if (lvl < levelEmpresa)
                {
                    msg = "Deseja excluir todos os registros que começam a letra '" + strNode + "'?";
                }
                else if (lvl == levelEmpresa)
                {
                    msg = "Deseja excluir o registro " + strNode + " e seus respectivos números?";
                }
                else if (lvl > levelEmpresa)
                {
                    msg = "Deseja excluir o número " + strNode + " de " + strPai + "?";
                }

                DialogResult res = MessageBox.Show(msg, "Excluir", MessageBoxButtons.YesNo);

                if (res == DialogResult.Yes)
                {
                    if (this.SelectedNode.Level < levelEmpresa)
                    {
                        lt.DeletarEmpresasPorInicial(strNode[0]);
                    }
                    if (this.SelectedNode.Level == levelEmpresa)
                    {
                        lt.DeletarContato(strNode);
                    }
                    else if (this.SelectedNode.Level > levelEmpresa)
                    {
                        lt.DeletarTelefone(strPai, strNode);
                    }
                    this.SelectedNode.Remove();
                }
            }
        }

        public void RefreshDados()
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;

                lt.Contatos.OrderBy(p => p.Nome);
                List<string> digitos = new List<string>();

                this.Nodes.Clear();
                this.BeginUpdate();
                foreach (Contato emp in lt.Contatos)
                {
                    if (digitos.Count(d => d.ToUpper() == emp.Nome[0].ToString().ToUpper()) == 0)
                    {
                        digitos.Add(emp.Nome[0].ToString().ToUpper());
                        this.Nodes.Add(emp.Nome[0].ToString().ToUpper(), digitos[digitos.FindIndex(d => d.ToUpper() == emp.Nome[0].ToString().ToUpper())].ToString());
                    }

                    this.Nodes[emp.Nome[0].ToString()].Nodes.Add(emp.Codigo.ToString(), emp.Nome);

                    foreach (Telefone tel in lt.Telefones.FindAll(t => t.CodCont == emp.Codigo).ToList())
                    {
                        this.Nodes[emp.Nome[0].ToString()].Nodes[emp.Codigo.ToString()].Nodes.Add(tel.Codigo.ToString(), tel.Numero);
                    }
                }
                this.Sort();
                this.EndUpdate();
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
    }


}
